Right multiply matrix
import sympy
from sympy.vector import AxisOrienter, CoordSys3D
x, y, theta = sympy.symbols("x y theta")
N = CoordSys3D("N")
M = AxisOrienter(theta, N.k).rotation_matrix(N)
M
M.inv()
v = sympy.Matrix([x, y, 0]).T * M.subs(theta, sympy.pi/2)
v
import py3d
py3d.Transform.from_euler("xyz", [0.4, -0.2, 0])
Welcome to py3d world, please visit https://tumiz.github.io/scenario/ for more information
Transform([[ 0.98006658, 0. , 0.19866933, 0. ],
[-0.07736548, 0.92106099, 0.3816559 , 0. ],
[-0.18298657, -0.38941834, 0.9027011 , 0. ],
[ 0. , 0. , 0. , 1. ]])
import py3d
py3d.Transform.from_euler("XYZ", [0.4, -0.2, 0])
Transform([[ 0.98006658, -0.07736548, 0.18298657, 0. ],
[ 0. , 0.92106099, 0.38941834, 0. ],
[-0.19866933, -0.3816559 , 0.9027011 , 0. ],
[ 0. , 0. , 0. , 1. ]])
import py3d
py3d.Transform.from_rpy([1.3, 1.0, 0]) @ py3d.Transform.from_rpy([0.9, .0, 0])
Transform([[ 0.54030231, 0.68032627, 0.49520661, 0. ],
[ 0. , -0.58850112, 0.8084964 , 0. ],
[ 0.84147098, -0.43683247, -0.31796851, 0. ],
[ 0. , 0. , 0. , 1. ]])
Apply a intrinsic rotation to a point
import py3d
p = py3d.Vector3([1, 3, 4])
py3d.label("P", p.tolist())
py3d.render(p.as_point(py3d.Color(g=1)))
t = py3d.Transform.from_euler("XYZ", [0, 0, 1])
p1 = p @ t
a = py3d.axis()
a.vertex @= t
py3d.label("P1", p1.tolist())
py3d.render(p1.as_point(py3d.Color(r=1)), a)
py3d.grid()
import py3d
e_car = py3d.car()
e_car.color = py3d.Color(g=1)
e_car.vertex @= py3d.Transform.from_euler("xyz", [0.4, -0.2, 0])
py3d.label("Extrincs", [4, 1, 3], color="green")
i_car = py3d.car()
i_car.color = py3d.Color(r=1)
i_car.vertex @= py3d.Transform.from_euler("XYZ", [0.4, -0.2, 0])
py3d.label("Intrincs", [4, -1, 2], color="red")
py3d.render(e_car, i_car)
py3d.grid(step=2)
In py3d, rpy represents roll, pitch and yaw, it is kind of intrinsic rotation
from PIL import Image
import numpy
import py3d
img = numpy.array(Image.open("py3d/doc/20220917214012.jpg"))
hw = img.shape[0]//2
hh = img.shape[1]//2
point = py3d.Vector3.grid(range(-hw, hw), range(-hh, hh))[::3, ::3]*0.01
point = point.as_point()
point.color = py3d.Vector3(img/255).H[::3, ::3]
point.vertex @= py3d.Transform.from_rpy([0, 0, -py3d.pi/2])
point